package com.bank.frame;

import java.awt.BorderLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JInternalFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;

import com.bank.dao.AccountDAO;
import com.bank.dao.RecordDAO;
import com.bank.utils.SystemConstants;

/**
 * 交易记录页
 */
public class RecordTablePanel extends JInternalFrame {
	// 第一个参数是 银行卡号 第二个参数是 用户的身份证号
	public RecordTablePanel(String card, String user) {
		super("转账记录", true, true, true, true);
		this.setSize(SystemConstants.FRAME_WIDTH, SystemConstants.FRAME_HEIGHT);
		JTable table = new JTable() {
			public boolean isCellEditable(int row, int column) {
				return false;
			}
		};
		// 查询所有该卡的交易记录
		TableModel tableModel = new DefaultTableModel(RecordDAO.search(1, card), RecordDAO.columnNames);
		table.setModel(tableModel);

		// 顶部操作栏
		JPanel topPanel = new JPanel();
		// 查询条件，要查哪一列，需要和DAO中的columnNames字段顺序对应
		topPanel.add(new JLabel("卡号"));
		// 用户所有的账号
		Object[][] accounts = AccountDAO.search(1, user);
		JComboBox<String> combo = new JComboBox<>();
		for (Object[] a : accounts) {
			combo.addItem(a[0].toString());
		}
		if (card != null) {// 默认选中
			combo.setSelectedItem(card);
		}
		topPanel.add(combo);
		JButton searchBtn = new JButton("查询");
		topPanel.add(searchBtn);

		JPanel panel = new JPanel(new BorderLayout());
		panel.setSize(SystemConstants.FRAME_WIDTH, SystemConstants.FRAME_HEIGHT);

		// 点击查询按钮的事件
		searchBtn.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				// 查的是哪一列DataDAO.search的第一个参数就传对应的索引，索引和DataDAO的columnNames对应
				TableModel tableModel = new DefaultTableModel(RecordDAO.search(1, combo.getSelectedItem().toString()),
						RecordDAO.columnNames);
				table.setModel(tableModel);
			}
		});

		// 把 表头 添加到容器顶部（使用普通的中间容器添加表格时，表头 和 内容 需要分开添加）
		panel.add(table.getTableHeader(), BorderLayout.NORTH);
		table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); // 单选
		// 把 表格内容 添加到容器中心
		this.add(topPanel, BorderLayout.NORTH);
		panel.add(table, BorderLayout.CENTER);
		this.add(panel, BorderLayout.CENTER);
		// 显示内部窗口
		this.setVisible(true);
	}
}
